class: inverse,left, middle background-image: url(background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 3: Percepción remota, análisis masivo y Google Earth Engine. ### Pre-procesamiento satelital II Gabriel Castro mail gabriel.castro.b@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Noviembre 2023</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ## Contenidos .pull-left[ - Combinaciones de bandas.(✔) - Calibración radiométrica. (TOA radianza - TOA reflectancia) (✔) - Corrección atmosférica. (✔) - Filtros de calidad de la información satelital. - Compensación topográfica por iluminación. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> © Allison Horst ] --- ### Filtros de calidad de la información: Quality assessment. <center> <img src="data:image/png;base64,#QA_BAND.PNG" alt="drawing" width="950" height="520"/> <center> --- ### Filtros de calidad de la información: Quality assessment. <center> <img src="data:image/png;base64,#QA_VALUE.PNG" alt="drawing" width="700" height="500"/> <center> --- ```r L8_SR <- rast("SR_L08_Concepcion.tif") # Iamgen corregida DOS2 QA <- rast("LC08_L1TP_001085_20161207_20200905_02_T1_QA_PIXEL.TIF") # leer banda QA ``` <center> <img src="data:image/png;base64,#L8_SR.PNG" alt="drawing" width="700" height="500"/> <center> --- ### Filtros de calidad de la información: Quality assessment. ```r ### Bits por tabla metodo NASA --------- source("QAbits_mask2.R") dec <- QAbits(path = "L08_Concepcion_C02_LVL1/") ``` ``` ## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## [1] 0 1 0 1 0 1 0 1 0 0 0 0 0 0 1 0 ## [1] 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 ## [1] 0 1 0 1 0 1 0 1 1 0 0 0 0 0 1 0 ## [1] 0 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 ## [1] 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 0 ## [1] 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 ## [1] 0 1 0 1 0 1 1 0 1 0 0 0 0 0 1 0 ## [1] 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 ## [1] 0 1 0 1 0 1 1 1 0 0 0 0 1 0 0 0 ## [1] 0 1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 ## [1] 0 1 0 1 1 1 0 1 0 1 0 1 0 0 0 0 ## [1] 0 1 0 1 1 1 1 0 0 0 0 1 0 0 1 0 ## [1] 0 1 0 1 1 1 1 0 0 1 0 1 0 0 0 0 ## [1] 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 ## [1] 1 1 0 1 0 1 0 1 0 1 0 0 0 1 0 0 ## [1] 1 1 0 1 0 1 0 1 1 0 0 0 0 1 1 0 ## [1] 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 ## [1] 1 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 ## [1] 1 1 0 1 0 1 1 0 1 1 0 0 0 1 0 0 ## [1] 1 1 0 1 0 1 1 1 0 0 0 0 1 1 0 0 ## [1] 1 1 0 1 1 1 0 1 0 0 0 1 0 1 1 0 ``` --- ```r view(dec) ```
--- ### Filtros de calidad de la información: Quality assessment. ```r QA.vals <- dec %>% # guarda nuestra tabla dec en el objeto QA.vals rowwise() %>% # aplicará una funcion a todas las filas filter("High" %in% c_across(28:31)) # buscará la condición High y filtrará por <- sum(QA.vals$count) / sum(dec$count) * 100 SR_L8_QA <- L8_SR # guardar imagen base en otro objeto SR_L8_QA[QA %in% QA.vals$value] <- NA # aplicamos los valores de QA para eliminar pixeles ``` --- ### Filtros de calidad de la información: Quality assessment. <center> <img src="data:image/png;base64,#QA_NOQA.PNG" alt="drawing" width="1000" height="550"/> <center> --- ### Compensación topográfica de la ilumiación <center> <img src="data:image/png;base64,#compo_topo.PNG" alt="drawing" width="1000" height="500"/> <center> --- ### Compensación topográfica de la ilumiación .pull-left[ Compensa la energÃa electromagnética que es reflejada por superficies irregulares (topografÃa) y es captada por el sensor. Las condiciones del terreno pueden generar grandes variaciones en la reflectancia de ciertos objetos en superficie. Contamos con una amplia cantidad de métodos. Sin embargo, <b> no existe un consenso general de cual método es mejor respecto a los demás. </b> El metodo a elegir dependera de **la rugosidad de la superficie** de estudio, los angulos del **azimuth y zenith del sol** y la temporada (estacion del año) en la cual nos encontremos trabajando. ] .pull-right[  ] --- ### Compensación topográfica de la ilumiación Dentro de los métodos de compensación basados en el uso de modelos de elevación digital, podemos encontrar 2 grandes grupos. 1. **Metodos Lambertianos** + Coseno (✔) + Coseno mejorado (✔) 2. **Metodos no lambertianos** + Minnaert + Minnaert slope + SCS <center> <img src="data:image/png;base64,#lambertiano.PNG" alt="drawing" width="700" height="250"/> <center> --- ### Compensación topográfica de la ilumiación Estos métodos se basan en la creación de un **modelo de iluminación** el cual considera la pendiente, orientación y posición del sol para determinar la condición de la luz en el área de interés. <left> <img src="data:image/png;base64,#il_formula.PNG" alt="drawing" width="650" height="300"/> <left> --- ### Compensación topográfica de la ilumiación ```r lista <- list.files( path = "L08_Concepcion_C02_LVL1/", pattern = glob2rx("*T1_B*.TIF"), full.names = T ) L8_SR <- rast("SR_L08_crop.tif") DEM <- rast("DEM_18S_NA.tif") metadato <- compMetaLandsat(lista) ``` --- ### Compensación topográfica de la ilumiación <center> <img src="data:image/png;base64,#DEM_B2.PNG" alt="drawing" width="900" height="500"/> <center> --- ### Compensación topográfica de la ilumiación #### Coseno Teillet et al. 1982 ```r sunzenith <- metadato$SZEN[1] # 90° - sunelev angle. sunazimuth <- metadato$SAZM[1] slope <- terra::terrain(DEM, v = "slope", unit = "degrees") aspect <- terra::terrain(DEM, v = "aspect", unit = "degrees") IL <- cos(slope * pi / 180) * cos(sunzenith * pi / 180) + sin(slope * pi / 180) * sin(sunzenith * pi / 180) * cos(sunazimuth * pi / 180 - aspect * pi / 180) IL_res <- resample(IL, L8_SR[[1]], method = "near") plot(IL_res) ``` - Es necesario aplicar un **resample** dado que las dimensiones de nuestro IL (modelo de iluminación) no son las mismas respecto a nuestra imagen Lansat 8. --- <center> <img src="data:image/png;base64,#IL.PNG" alt="drawing" width="850" height="600"/> <center> --- ### Compensación topográfica de la ilumiación #### Coseno Teillet et al. 1982 ```r ## COSENO TOPO CORRECTION ---- topo_cos <- L8_SR * (cos(sunzenith * pi / 180) / IL_res) ``` <left> <img src="data:image/png;base64,#coseno_formula.PNG" alt="drawing" width="500" height="150"/> <left> --- ### Compensación topográfica de la ilumiación <center> <img src="data:image/png;base64,#sr_coseno.PNG" alt="drawing" width="1000"height="500"/> <center> --- ### Compensación topográfica de la ilumiación #### Coseno mejorado Civco et al. 1989 Se presenta una mejora respecto al modelo de iluminación considerando el valor promedio para el area de estudio, esto permite generar una compensación mas homogenea. ```r ## COSENO TOPO CORRECTION ---- ILmean <- terra::global(IL_res, "mean", na.rm = TRUE) # valor promedio IL topo_improve_cos <- L8_SR + (L8_SR * (ILmean$mean - IL_res) / ILmean$mean) ``` <left> <img src="data:image/png;base64,#coseno_imp_formula.PNG" alt="drawing" width="500" height="150"/> <left> --- ### Comparación visual. <center> <img src="data:image/png;base64,#comparacion.PNG" alt="drawing" width="800"height="460"/> <center> --- ### Comparación de reflectancias superficiales con los diferentes metodos. ```r # Comparacion pixel Reflectancia superficial inclinada / reflectancia superficial horizonatal cos-impcos il_df <- IL_res %>% as.data.frame(xy = T) # buscar el pixel mas oscuro de mi modelo de iluminación. px <- matrix(data = c(725550, 5974060), nrow = 1, ncol = 2) # extraer las coordenadas de este px oscuro ## data frames con los valores de reflectancia superficial por banda ---- ref_sr <- terra::extract(L8_SR, px) %>% t() %>% as.data.frame() ref_sr <- tibble::rownames_to_column(ref_sr, "band") ref_sr_cos <- terra::extract(topo_cos, px) %>% t() %>% as.data.frame() ref_sr_impcos <- terra::extract(topo_improve_cos, px) %>% t() %>% as.data.frame() df <- ref_sr %>% cbind(ref_sr_cos$V1, ref_sr_impcos$V1) names(df) <- c("bandas", "SR", "SR coseno", "SR imp coseno") print(df) ``` --- ### Comparación de reflectancias superficiales con los diferentes metodos. ```r ## Plot simple de la reflectancia superficial corregida por 2 metodos --------- plot( x = df$SR, type = "l", xlab = "L08 bands (costal - SWIR2)", # tipo de grafico "l" lineas ylab = "surface reflectance (%)", col = "red", lwd = 2, ylim = c(0, 0.70), main = "Comparacion SR diferentes métodos de compensación" ) lines(x = df$`SR coseno`, type = "l", col = "blue", lwd = 2) # agregar otra linea. lines(x = df$`SR imp coseno`, type = "l", col = "green", lwd = 2) # agregar otra linea. legend( x = "topright", # posición de la leyenda legend = c("SR", "SR cos", "SR impcos"), # etiquetas col = c("red", "blue", "green"), # colores de la linea lwd = 2 # ancho de la linea ) ``` --- ### Comparación de reflectancias superficiales con los diferentes metodos. <center> <img src="data:image/png;base64,#reflectancias.PNG" alt="drawing" width="900"height="550"/> <center> --- ### BibliografÃa. Civco, D. L. (1989). Topographic normalization of Landsat Thematic Mapper digital imagery. Photogrammetric engineering and remote sensing, 55(9), 1303-1309. Allen, Tom. (2000). Topographic Normalization of Landsat Thematic Mapper Data in Three Mountain Environments. Geocarto International. 15. 10.1080/10106040008542148. Riaño, David & Chuvieco, Emilio & Salas, Javier & Aguado, Inmaculada. (2003). Assessment of different topographic corrections in Landsat-TM data for mapping vegetation types (2003). Geoscience and Remote Sensing, IEEE Transactions on. 41. 1056 - 1061. 10.1109/TGRS.2003.811693. Riaño, David & Chuvieco, Emilio & Salas, Javier & Aguado, Inmaculada. (2003). Assessment of different topographic corrections in Landsat-TM data for mapping vegetation types (2003). Geoscience and Remote Sensing, IEEE Transactions on. 41. 1056 - 1061. 10.1109/TGRS.2003.811693. --- class: inverse middle 